package com.learn.feign_service;

import com.learn.controller.dto.AddNoticeReq;
import com.learn.controller.dto.NoticeType;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 注解@FeignClient：配置Feign客户端，客户端内定义映射到服务提供者的抽象方法
 * · name可以配置为eureka内应用名称，但feign并不依赖于eureka存在，在非微服务架构中也可以使用feign进行远程调用，配置url即可
 * · url配置可以是字符串，也可以从配置文件中获取。若是从配置文件中获取url，那么该FeignClient是依赖于该url配置的！所以可以配合@ConditionalOnProperty注解，当配置了url时才让该FeignClient生效
 * · 客户端内定义映射到服务提供者的抽象方法的请求方法和请求参数一定要严格遵守注解，例如如下免去@RequestParam("name")则服务提供方则收不到该请求参数
 */
@FeignClient(name = "PROJECT-SERVER-NOTICE")
// @FeignClient(name = "server-name", url = "http://localhost:9001")
// @FeignClient(name = "server-name", url = "${app.server-url}")
// @ConditionalOnProperty(prefix = "app", value = "server-url")
public interface NoticeFeignService {
    /**
     * @XxxMapping的实际映射地址为：http://PROJECT-SERVER-NOTICE/notice/addNotice
     */
    @PostMapping("/notice/addNotice")
    public String addDept(@RequestBody AddNoticeReq notice);
    
    @PostMapping("/notice/listNoticeByType")
    public String findOneDept(@RequestParam("noticeType") NoticeType noticeType);
    
    @PostMapping("/notice/findAllNotice")
    public String findAllNotice();
}
